{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Neural Network learns sine function using autodiff in JAX"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"https://upload.wikimedia.org/wikipedia/commons/8/86/Google_JAX_logo.svg\" width=150 />"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This jupyter notebook intends to be a hands-on tutorial for the implementation of a simple Multi-Layer Perceptron (MLP) trained by plain gradient descent with derivative information given by (reverse-mode) automatic differentiation. The neural network is trained to mimic the sin function from data.\n",
    "\n",
    "Simplifications:\n",
    "- No train-val-test split\n",
    "- No regularization\n",
    "- No Stochastic Minibatching\n",
    "- Simple Gradient Descent with constant learning rate\n",
    "- No training modifications"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given:\n",
    "\n",
    "- $x \\in \\Re^{N \\times 1}$ and $y \\in \\Re^{N \\times 1}$ (N pairs of (x, y) samples that somehow follow a sine curve)\n",
    "- weight matrices and biases with the correct shapes\n",
    "- sigmoid activation function $\\sigma(x) = \\frac{1}{1 + e^{-x}}$\n",
    "\n",
    "\n",
    "Notice the convention of the data matrices being batch x spatial. As such, weight matrices have to be right-multiplied in order to affect the spatial dimensions."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forward Pass\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "y_1 &= x \\cdot W_1\n",
    "\\\\\n",
    "\\tilde{y}_1 &= y_1 + b_1\n",
    "\\\\\n",
    "\\hat{y}_1 &= \\sigma(\\tilde{y}_1)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "y_2 &= \\hat{y}_1 \\cdot W_2\n",
    "\\\\\n",
    "\\tilde{y}_2 &= y_2 + b_2\n",
    "\\\\\n",
    "\\hat{y}_2 &= \\sigma(\\tilde{y}_2)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "y_3 &= \\hat{y}_2 \\cdot W_3\n",
    "\\\\\n",
    "\\tilde{y}_3 &= y_3 + b_3\n",
    "\\\\\n",
    "\\hat{y}_3 &= \\sigma(\\tilde{y}_3)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "y_4 &= \\hat{y}_3 \\cdot W_4\n",
    "\\\\\n",
    "\\tilde{y}_4 &= y_4 + b_4\n",
    "\\\\\n",
    "\\hat{y}_4 &= I(\\tilde{y}_3)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "$$\n",
    "L = \\frac{1}{2} \\text{mean\\_over\\_all\\_axes}((\\hat{y}_4 - y)^2)\n",
    "$$"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Weight Initiliazation\n",
    "\n",
    "(Xavier Glorot Uniform init)\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "W_{i,kl} &\\propto \\mathcal{U}(-lim, lim)\n",
    "\\\\\n",
    "lim &= \\sqrt{\\frac{6}{\\text{fan\\_in}_i + \\text{fan\\_out}_i}}\n",
    "\\\\\n",
    "b_{i,k} &= 0\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Learning:\n",
    "\n",
    "Approximately solve a non-convex optimization problem in the parameter space from a randomized initial estimate.\n",
    "\n",
    "1. Initialize weights and biases\n",
    "2. Run forward pass, but through a JAX transformation that also yields a gradient (here for all samples together - no minibatching)\n",
    "3. Update each parameter with its gradient, e.g., $W_1 \\leftarrow W_1 - \\eta \\bar{W}_1$\n",
    "4. Repeat until loss is sufficiently decreased"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jax\n",
    "import jax.numpy as jnp\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "N_SAMPLES = 200\n",
    "LAYERS = [1, 10, 10, 10, 1]\n",
    "LEARNING_RATE = 0.1\n",
    "N_EPOCHS = 30_000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n"
     ]
    }
   ],
   "source": [
    "key = jax.random.PRNGKey(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "key, xkey, ynoisekey = jax.random.split(key, 3)\n",
    "x_samples = jax.random.uniform(xkey, (N_SAMPLES, 1), minval=0.0, maxval=2 * jnp.pi)\n",
    "y_samples = jnp.sin(x_samples) + jax.random.normal(ynoisekey, (N_SAMPLES, 1)) * 0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f3a704b73d0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x_samples, y_samples)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Weight initiliazation\n",
    "weight_matrices = []\n",
    "bias_vectors = []\n",
    "activation_functions = []\n",
    "\n",
    "for (fan_in, fan_out) in zip(LAYERS[:-1], LAYERS[1:]):\n",
    "    kernel_matrix_uniform_limit = jnp.sqrt(6 / (fan_in + fan_out))\n",
    "\n",
    "    key, wkey = jax.random.split(key)\n",
    "\n",
    "    W = jax.random.uniform(\n",
    "        wkey,\n",
    "        (fan_in, fan_out),\n",
    "        minval=-kernel_matrix_uniform_limit,\n",
    "        maxval=+kernel_matrix_uniform_limit,\n",
    "    )\n",
    "\n",
    "    b = jnp.zeros(fan_out)\n",
    "\n",
    "    weight_matrices.append(W)\n",
    "    bias_vectors.append(b)\n",
    "    activation_functions.append(jax.nn.sigmoid)\n",
    "\n",
    "activation_functions[-1] = lambda x: x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def network_forward(x, weights, biases, activations):\n",
    "    a = x\n",
    "\n",
    "    for W, b, f in zip(\n",
    "        weights,\n",
    "        biases,\n",
    "        activations,\n",
    "    ):\n",
    "        a = f(a @ W + b)\n",
    "    \n",
    "    return a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f3a682532e0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x_samples, y_samples)\n",
    "plt.scatter(x_samples, network_forward(x_samples, weight_matrices, bias_vectors, activation_functions))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loss_forward(y_guess, y_ref):\n",
    "    delta = y_guess - y_ref\n",
    "    return 0.5 * jnp.mean(delta**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(0.3169261, dtype=float32)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_forward(\n",
    "    network_forward(x_samples, weight_matrices, bias_vectors, activation_functions),\n",
    "    y_samples\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_and_grad_fun = jax.value_and_grad(\n",
    "    lambda Ws, bs: loss_forward(\n",
    "        network_forward(\n",
    "            x_samples,\n",
    "            Ws,\n",
    "            bs,\n",
    "            activation_functions,\n",
    "        ),\n",
    "        y_samples,\n",
    "    ),\n",
    "    argnums=(0, 1),\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "initial_loss, (initial_weight_gradient, initial_bias_gradient) = loss_and_grad_fun(\n",
    "    weight_matrices,\n",
    "    bias_vectors,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(0.3169261, dtype=float32)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "initial_loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Array([[ 7.2213945e-05, -1.8096704e-04, -2.1982470e-03,  3.7786365e-04,\n",
       "          2.5326079e-03,  1.5415612e-03, -2.2517676e-03,  2.7847683e-04,\n",
       "         -1.8824994e-05, -2.5364652e-04]], dtype=float32),\n",
       " Array([[-0.00186137,  0.00254069,  0.00303164,  0.00068392, -0.00191334,\n",
       "         -0.00034572, -0.00172571, -0.00117251, -0.00126445,  0.00313279],\n",
       "        [-0.00177593,  0.00241809,  0.0028959 ,  0.00063861, -0.00183092,\n",
       "         -0.00032684, -0.00164646, -0.00112519, -0.00121106,  0.00299182],\n",
       "        [-0.00085401,  0.00124205,  0.00133947,  0.00050296, -0.00079306,\n",
       "         -0.00020006, -0.00078846, -0.00044838, -0.00051117,  0.00138902],\n",
       "        [-0.00090233,  0.00130438,  0.00142061,  0.00051174, -0.00084676,\n",
       "         -0.00020707, -0.00083342, -0.00048307, -0.00054727,  0.00147264],\n",
       "        [-0.00173393,  0.00235984,  0.00282791,  0.00062118, -0.00178836,\n",
       "         -0.00031862, -0.00160746, -0.00109964, -0.00118311,  0.0029214 ],\n",
       "        [-0.00169394,  0.00233274,  0.00274546,  0.00067284, -0.00171918,\n",
       "         -0.00032565, -0.00156979, -0.00104322, -0.00113261,  0.0028386 ],\n",
       "        [-0.00086561,  0.00125698,  0.00135895,  0.00050501, -0.00080597,\n",
       "         -0.00020173, -0.00079925, -0.00045672, -0.00051985,  0.00140909],\n",
       "        [-0.00185942,  0.00253742,  0.00302885,  0.00068175, -0.00191195,\n",
       "         -0.00034504, -0.00172392, -0.00117197, -0.00126364,  0.00312985],\n",
       "        [-0.00070292,  0.00105443,  0.0010812 ,  0.00049303, -0.00061782,\n",
       "         -0.00018196, -0.00064776, -0.00033167, -0.00039216,  0.00112352],\n",
       "        [-0.00167203,  0.00230448,  0.00270869,  0.00066884, -0.00169485,\n",
       "         -0.00032246, -0.00154941, -0.00102751, -0.00111625,  0.0028007 ]],      dtype=float32),\n",
       " Array([[-0.00365221,  0.0007652 ,  0.00632715, -0.00546611, -0.00582907,\n",
       "         -0.00213392,  0.00944015,  0.00024883, -0.00603162,  0.01152291],\n",
       "        [-0.00453603,  0.00095066,  0.00785816, -0.00679385, -0.00724826,\n",
       "         -0.00264903,  0.01172266,  0.00030913, -0.00748878,  0.01431788],\n",
       "        [-0.00366527,  0.00076805,  0.0063497 , -0.00548749, -0.00585316,\n",
       "         -0.00214106,  0.0094731 ,  0.00024975, -0.00605226,  0.01156653],\n",
       "        [-0.00430292,  0.00089671,  0.00745491, -0.00635511, -0.00672618,\n",
       "         -0.002535  ,  0.01115086,  0.00029172, -0.00714638,  0.01346717],\n",
       "        [-0.00209144,  0.00043807,  0.00362331, -0.00312801, -0.00333427,\n",
       "         -0.00122255,  0.00540676,  0.00014245, -0.00345508,  0.00659576],\n",
       "        [-0.00306374,  0.00064038,  0.00530787, -0.0045586 , -0.00484507,\n",
       "         -0.0017967 ,  0.00792829,  0.00020828, -0.00507245,  0.00963188],\n",
       "        [-0.00329547,  0.00068953,  0.00570927, -0.00491587, -0.00523232,\n",
       "         -0.00192953,  0.00852372,  0.00022424, -0.00545022,  0.01037637],\n",
       "        [-0.00204387,  0.00042894,  0.0035407 , -0.00307141, -0.00328304,\n",
       "         -0.00119109,  0.00527854,  0.00013946, -0.00336951,  0.00646454],\n",
       "        [-0.00282073,  0.00059098,  0.0048867 , -0.00422143, -0.00450152,\n",
       "         -0.00164817,  0.0072911 ,  0.00019217, -0.00465856,  0.0088992 ],\n",
       "        [-0.00483377,  0.00101049,  0.00837426, -0.00719461, -0.00764857,\n",
       "         -0.00283406,  0.01250758,  0.00032865, -0.00800175,  0.01519974]],      dtype=float32),\n",
       " Array([[-0.09192445],\n",
       "        [-0.06786033],\n",
       "        [-0.08611915],\n",
       "        [-0.04069593],\n",
       "        [-0.08420935],\n",
       "        [-0.08911227],\n",
       "        [-0.08413495],\n",
       "        [-0.06735089],\n",
       "        [-0.09053957],\n",
       "        [-0.0797373 ]], dtype=float32)]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "initial_weight_gradient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_and_grad_fun = jax.jit(loss_and_grad_fun)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, loss: 0.22284099459648132\n",
      "epoch: 100, loss: 0.18129336833953857\n",
      "epoch: 200, loss: 0.15051481127738953\n",
      "epoch: 300, loss: 0.13804425299167633\n",
      "epoch: 400, loss: 0.13380441069602966\n",
      "epoch: 500, loss: 0.1318942755460739\n",
      "epoch: 600, loss: 0.1306501030921936\n",
      "epoch: 700, loss: 0.1295970380306244\n",
      "epoch: 800, loss: 0.12858381867408752\n",
      "epoch: 900, loss: 0.12756027281284332\n",
      "epoch: 1000, loss: 0.12651056051254272\n",
      "epoch: 1100, loss: 0.12543118000030518\n",
      "epoch: 1200, loss: 0.12432336807250977\n",
      "epoch: 1300, loss: 0.1231902688741684\n",
      "epoch: 1400, loss: 0.12203596532344818\n",
      "epoch: 1500, loss: 0.12086497992277145\n",
      "epoch: 1600, loss: 0.11968198418617249\n",
      "epoch: 1700, loss: 0.11849166452884674\n",
      "epoch: 1800, loss: 0.1172986552119255\n",
      "epoch: 1900, loss: 0.11610740423202515\n",
      "epoch: 2000, loss: 0.11492209881544113\n",
      "epoch: 2100, loss: 0.11374662071466446\n",
      "epoch: 2200, loss: 0.11258453130722046\n",
      "epoch: 2300, loss: 0.11143899708986282\n",
      "epoch: 2400, loss: 0.11031276732683182\n",
      "epoch: 2500, loss: 0.10920818150043488\n",
      "epoch: 2600, loss: 0.1081271693110466\n",
      "epoch: 2700, loss: 0.10707126557826996\n",
      "epoch: 2800, loss: 0.10604164749383926\n",
      "epoch: 2900, loss: 0.10503911972045898\n",
      "epoch: 3000, loss: 0.10406415909528732\n",
      "epoch: 3100, loss: 0.1031169593334198\n",
      "epoch: 3200, loss: 0.10219745337963104\n",
      "epoch: 3300, loss: 0.10130533576011658\n",
      "epoch: 3400, loss: 0.10044009983539581\n",
      "epoch: 3500, loss: 0.09960103780031204\n",
      "epoch: 3600, loss: 0.098787322640419\n",
      "epoch: 3700, loss: 0.0979979857802391\n",
      "epoch: 3800, loss: 0.09723196178674698\n",
      "epoch: 3900, loss: 0.09648804366588593\n",
      "epoch: 4000, loss: 0.09576499462127686\n",
      "epoch: 4100, loss: 0.09506148844957352\n",
      "epoch: 4200, loss: 0.09437616169452667\n",
      "epoch: 4300, loss: 0.09370756149291992\n",
      "epoch: 4400, loss: 0.09305420517921448\n",
      "epoch: 4500, loss: 0.09241460263729095\n",
      "epoch: 4600, loss: 0.09178720414638519\n",
      "epoch: 4700, loss: 0.09117040783166885\n",
      "epoch: 4800, loss: 0.0905626192688942\n",
      "epoch: 4900, loss: 0.0899621844291687\n",
      "epoch: 5000, loss: 0.08936747163534164\n",
      "epoch: 5100, loss: 0.08877678960561752\n",
      "epoch: 5200, loss: 0.08818844705820084\n",
      "epoch: 5300, loss: 0.08760076016187668\n",
      "epoch: 5400, loss: 0.08701209723949432\n",
      "epoch: 5500, loss: 0.08642080426216125\n",
      "epoch: 5600, loss: 0.08582530170679092\n",
      "epoch: 5700, loss: 0.08522412925958633\n",
      "epoch: 5800, loss: 0.08461592346429825\n",
      "epoch: 5900, loss: 0.08399951457977295\n",
      "epoch: 6000, loss: 0.08337396383285522\n",
      "epoch: 6100, loss: 0.08273860812187195\n",
      "epoch: 6200, loss: 0.08209314942359924\n",
      "epoch: 6300, loss: 0.08143772184848785\n",
      "epoch: 6400, loss: 0.08077295124530792\n",
      "epoch: 6500, loss: 0.08010003715753555\n",
      "epoch: 6600, loss: 0.07942076772451401\n",
      "epoch: 6700, loss: 0.07873759418725967\n",
      "epoch: 6800, loss: 0.07805361598730087\n",
      "epoch: 6900, loss: 0.0773724913597107\n",
      "epoch: 7000, loss: 0.07669846713542938\n",
      "epoch: 7100, loss: 0.07603612542152405\n",
      "epoch: 7200, loss: 0.07539033889770508\n",
      "epoch: 7300, loss: 0.07476596534252167\n",
      "epoch: 7400, loss: 0.07416768372058868\n",
      "epoch: 7500, loss: 0.07359969615936279\n",
      "epoch: 7600, loss: 0.07306558638811111\n",
      "epoch: 7700, loss: 0.07256808876991272\n",
      "epoch: 7800, loss: 0.07210896909236908\n",
      "epoch: 7900, loss: 0.07168898731470108\n",
      "epoch: 8000, loss: 0.07130787521600723\n",
      "epoch: 8100, loss: 0.07096447795629501\n",
      "epoch: 8200, loss: 0.07065678387880325\n",
      "epoch: 8300, loss: 0.07038218528032303\n",
      "epoch: 8400, loss: 0.0701376348733902\n",
      "epoch: 8500, loss: 0.06991977244615555\n",
      "epoch: 8600, loss: 0.06972518563270569\n",
      "epoch: 8700, loss: 0.0695505142211914\n",
      "epoch: 8800, loss: 0.06939247250556946\n",
      "epoch: 8900, loss: 0.06924812495708466\n",
      "epoch: 9000, loss: 0.06911472231149673\n",
      "epoch: 9100, loss: 0.0689898282289505\n",
      "epoch: 9200, loss: 0.06887131929397583\n",
      "epoch: 9300, loss: 0.06875735521316528\n",
      "epoch: 9400, loss: 0.06864634901285172\n",
      "epoch: 9500, loss: 0.0685369074344635\n",
      "epoch: 9600, loss: 0.06842786818742752\n",
      "epoch: 9700, loss: 0.0683181956410408\n",
      "epoch: 9800, loss: 0.06820698827505112\n",
      "epoch: 9900, loss: 0.06809341907501221\n",
      "epoch: 10000, loss: 0.06797672808170319\n",
      "epoch: 10100, loss: 0.06785618513822556\n",
      "epoch: 10200, loss: 0.06773108243942261\n",
      "epoch: 10300, loss: 0.06760068982839584\n",
      "epoch: 10400, loss: 0.06746426224708557\n",
      "epoch: 10500, loss: 0.06732098758220673\n",
      "epoch: 10600, loss: 0.06717001646757126\n",
      "epoch: 10700, loss: 0.06701046973466873\n",
      "epoch: 10800, loss: 0.06684135645627975\n",
      "epoch: 10900, loss: 0.06666166335344315\n",
      "epoch: 11000, loss: 0.06647032499313354\n",
      "epoch: 11100, loss: 0.06626622378826141\n",
      "epoch: 11200, loss: 0.06604830920696259\n",
      "epoch: 11300, loss: 0.06581549346446991\n",
      "epoch: 11400, loss: 0.06556679308414459\n",
      "epoch: 11500, loss: 0.0653013363480568\n",
      "epoch: 11600, loss: 0.06501829624176025\n",
      "epoch: 11700, loss: 0.06471695005893707\n",
      "epoch: 11800, loss: 0.06439659744501114\n",
      "epoch: 11900, loss: 0.06405655294656754\n",
      "epoch: 12000, loss: 0.06369614601135254\n",
      "epoch: 12100, loss: 0.06331497430801392\n",
      "epoch: 12200, loss: 0.06291306018829346\n",
      "epoch: 12300, loss: 0.06249139830470085\n",
      "epoch: 12400, loss: 0.06205206364393234\n",
      "epoch: 12500, loss: 0.061598338186740875\n",
      "epoch: 12600, loss: 0.06113412603735924\n",
      "epoch: 12700, loss: 0.06066316366195679\n",
      "epoch: 12800, loss: 0.060188282281160355\n",
      "epoch: 12900, loss: 0.05971110984683037\n",
      "epoch: 13000, loss: 0.059232328087091446\n",
      "epoch: 13100, loss: 0.0587521493434906\n",
      "epoch: 13200, loss: 0.0582706592977047\n",
      "epoch: 13300, loss: 0.05778815969824791\n",
      "epoch: 13400, loss: 0.057305220514535904\n",
      "epoch: 13500, loss: 0.056822650134563446\n",
      "epoch: 13600, loss: 0.056341543793678284\n",
      "epoch: 13700, loss: 0.05586322769522667\n",
      "epoch: 13800, loss: 0.05538930743932724\n",
      "epoch: 13900, loss: 0.05492155998945236\n",
      "epoch: 14000, loss: 0.0544617734849453\n",
      "epoch: 14100, loss: 0.054011568427085876\n",
      "epoch: 14200, loss: 0.05357224866747856\n",
      "epoch: 14300, loss: 0.053144559264183044\n",
      "epoch: 14400, loss: 0.05272875726222992\n",
      "epoch: 14500, loss: 0.05232462286949158\n",
      "epoch: 14600, loss: 0.051931679248809814\n",
      "epoch: 14700, loss: 0.05154939368367195\n",
      "epoch: 14800, loss: 0.05117722973227501\n",
      "epoch: 14900, loss: 0.05081477016210556\n",
      "epoch: 15000, loss: 0.05046173930168152\n",
      "epoch: 15100, loss: 0.05011796951293945\n",
      "epoch: 15200, loss: 0.04978330433368683\n",
      "epoch: 15300, loss: 0.04945759102702141\n",
      "epoch: 15400, loss: 0.04914060980081558\n",
      "epoch: 15500, loss: 0.048832058906555176\n",
      "epoch: 15600, loss: 0.04853155091404915\n",
      "epoch: 15700, loss: 0.04823866859078407\n",
      "epoch: 15800, loss: 0.04795291647315025\n",
      "epoch: 15900, loss: 0.047673843801021576\n",
      "epoch: 16000, loss: 0.04740099981427193\n",
      "epoch: 16100, loss: 0.04713398963212967\n",
      "epoch: 16200, loss: 0.046872444450855255\n",
      "epoch: 16300, loss: 0.0466160848736763\n",
      "epoch: 16400, loss: 0.046364668756723404\n",
      "epoch: 16500, loss: 0.04611795023083687\n",
      "epoch: 16600, loss: 0.045875806361436844\n",
      "epoch: 16700, loss: 0.04563814401626587\n",
      "epoch: 16800, loss: 0.045404840260744095\n",
      "epoch: 16900, loss: 0.04517586529254913\n",
      "epoch: 17000, loss: 0.044951193034648895\n",
      "epoch: 17100, loss: 0.044730816036462784\n",
      "epoch: 17200, loss: 0.044514741748571396\n",
      "epoch: 17300, loss: 0.044302988797426224\n",
      "epoch: 17400, loss: 0.044095609337091446\n",
      "epoch: 17500, loss: 0.04389265552163124\n",
      "epoch: 17600, loss: 0.0436941534280777\n",
      "epoch: 17700, loss: 0.0435001440346241\n",
      "epoch: 17800, loss: 0.04331071674823761\n",
      "epoch: 17900, loss: 0.04312589392066002\n",
      "epoch: 18000, loss: 0.04294571653008461\n",
      "epoch: 18100, loss: 0.04277024045586586\n",
      "epoch: 18200, loss: 0.04259945824742317\n",
      "epoch: 18300, loss: 0.042433422058820724\n",
      "epoch: 18400, loss: 0.042272113263607025\n",
      "epoch: 18500, loss: 0.042115554213523865\n",
      "epoch: 18600, loss: 0.04196371138095856\n",
      "epoch: 18700, loss: 0.0418165847659111\n",
      "epoch: 18800, loss: 0.04167412593960762\n",
      "epoch: 18900, loss: 0.04153631255030632\n",
      "epoch: 19000, loss: 0.04140307381749153\n",
      "epoch: 19100, loss: 0.04127437621355057\n",
      "epoch: 19200, loss: 0.04115014523267746\n",
      "epoch: 19300, loss: 0.041030291467905045\n",
      "epoch: 19400, loss: 0.04091474786400795\n",
      "epoch: 19500, loss: 0.0408034585416317\n",
      "epoch: 19600, loss: 0.04069630056619644\n",
      "epoch: 19700, loss: 0.04059317335486412\n",
      "epoch: 19800, loss: 0.04049402102828026\n",
      "epoch: 19900, loss: 0.040398698300123215\n",
      "epoch: 20000, loss: 0.04030711576342583\n",
      "epoch: 20100, loss: 0.04021919146180153\n",
      "epoch: 20200, loss: 0.040134772658348083\n",
      "epoch: 20300, loss: 0.04005381464958191\n",
      "epoch: 20400, loss: 0.03997615724802017\n",
      "epoch: 20500, loss: 0.039901718497276306\n",
      "epoch: 20600, loss: 0.03983037546277046\n",
      "epoch: 20700, loss: 0.039762046188116074\n",
      "epoch: 20800, loss: 0.0396965928375721\n",
      "epoch: 20900, loss: 0.03963395208120346\n",
      "epoch: 21000, loss: 0.03957398980855942\n",
      "epoch: 21100, loss: 0.0395166240632534\n",
      "epoch: 21200, loss: 0.039461735635995865\n",
      "epoch: 21300, loss: 0.03940926864743233\n",
      "epoch: 21400, loss: 0.03935908526182175\n",
      "epoch: 21500, loss: 0.03931111469864845\n",
      "epoch: 21600, loss: 0.03926525264978409\n",
      "epoch: 21700, loss: 0.039221446961164474\n",
      "epoch: 21800, loss: 0.03917958214879036\n",
      "epoch: 21900, loss: 0.039139583706855774\n",
      "epoch: 22000, loss: 0.03910137340426445\n",
      "epoch: 22100, loss: 0.039064887911081314\n",
      "epoch: 22200, loss: 0.0390300415456295\n",
      "epoch: 22300, loss: 0.03899674862623215\n",
      "epoch: 22400, loss: 0.038964979350566864\n",
      "epoch: 22500, loss: 0.03893463686108589\n",
      "epoch: 22600, loss: 0.03890565410256386\n",
      "epoch: 22700, loss: 0.03887800872325897\n",
      "epoch: 22800, loss: 0.038851600140333176\n",
      "epoch: 22900, loss: 0.03882638365030289\n",
      "epoch: 23000, loss: 0.03880231827497482\n",
      "epoch: 23100, loss: 0.03877933323383331\n",
      "epoch: 23200, loss: 0.038757387548685074\n",
      "epoch: 23300, loss: 0.03873642906546593\n",
      "epoch: 23400, loss: 0.03871642053127289\n",
      "epoch: 23500, loss: 0.03869732469320297\n",
      "epoch: 23600, loss: 0.0386790931224823\n",
      "epoch: 23700, loss: 0.03866166993975639\n",
      "epoch: 23800, loss: 0.03864503279328346\n",
      "epoch: 23900, loss: 0.038629140704870224\n",
      "epoch: 24000, loss: 0.03861398249864578\n",
      "epoch: 24100, loss: 0.038599465042352676\n",
      "epoch: 24200, loss: 0.0385856032371521\n",
      "epoch: 24300, loss: 0.03857235237956047\n",
      "epoch: 24400, loss: 0.038559697568416595\n",
      "epoch: 24500, loss: 0.038547612726688385\n",
      "epoch: 24600, loss: 0.038536038249731064\n",
      "epoch: 24700, loss: 0.03852498531341553\n",
      "epoch: 24800, loss: 0.0385144017636776\n",
      "epoch: 24900, loss: 0.03850429132580757\n",
      "epoch: 25000, loss: 0.03849460184574127\n",
      "epoch: 25100, loss: 0.0384853295981884\n",
      "epoch: 25200, loss: 0.03847646713256836\n",
      "epoch: 25300, loss: 0.038467954844236374\n",
      "epoch: 25400, loss: 0.03845983371138573\n",
      "epoch: 25500, loss: 0.03845205903053284\n",
      "epoch: 25600, loss: 0.03844457119703293\n",
      "epoch: 25700, loss: 0.03843742609024048\n",
      "epoch: 25800, loss: 0.03843057155609131\n",
      "epoch: 25900, loss: 0.038423992693424225\n",
      "epoch: 26000, loss: 0.038417696952819824\n",
      "epoch: 26100, loss: 0.038411639630794525\n",
      "epoch: 26200, loss: 0.03840583562850952\n",
      "epoch: 26300, loss: 0.03840026259422302\n",
      "epoch: 26400, loss: 0.03839489817619324\n",
      "epoch: 26500, loss: 0.038389768451452255\n",
      "epoch: 26600, loss: 0.0383848212659359\n",
      "epoch: 26700, loss: 0.038380060344934464\n",
      "epoch: 26800, loss: 0.03837549686431885\n",
      "epoch: 26900, loss: 0.03837110847234726\n",
      "epoch: 27000, loss: 0.038366880267858505\n",
      "epoch: 27100, loss: 0.038362789899110794\n",
      "epoch: 27200, loss: 0.03835887461900711\n",
      "epoch: 27300, loss: 0.03835509717464447\n",
      "epoch: 27400, loss: 0.03835145756602287\n",
      "epoch: 27500, loss: 0.038347940891981125\n",
      "epoch: 27600, loss: 0.03834455460309982\n",
      "epoch: 27700, loss: 0.03834128752350807\n",
      "epoch: 27800, loss: 0.038338132202625275\n",
      "epoch: 27900, loss: 0.03833509609103203\n",
      "epoch: 28000, loss: 0.03833216428756714\n",
      "epoch: 28100, loss: 0.038329314440488815\n",
      "epoch: 28200, loss: 0.03832656145095825\n",
      "epoch: 28300, loss: 0.03832390159368515\n",
      "epoch: 28400, loss: 0.038321319967508316\n",
      "epoch: 28500, loss: 0.03831884264945984\n",
      "epoch: 28600, loss: 0.03831642493605614\n",
      "epoch: 28700, loss: 0.038314104080200195\n",
      "epoch: 28800, loss: 0.038311854004859924\n",
      "epoch: 28900, loss: 0.03830965235829353\n",
      "epoch: 29000, loss: 0.03830752521753311\n",
      "epoch: 29100, loss: 0.03830546885728836\n",
      "epoch: 29200, loss: 0.03830346837639809\n",
      "epoch: 29300, loss: 0.03830152750015259\n",
      "epoch: 29400, loss: 0.03829963132739067\n",
      "epoch: 29500, loss: 0.03829779475927353\n",
      "epoch: 29600, loss: 0.038296014070510864\n",
      "epoch: 29700, loss: 0.03829427808523178\n",
      "epoch: 29800, loss: 0.038292597979307175\n",
      "epoch: 29900, loss: 0.038290951400995255\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "loss_history = []\n",
    "for epoch in range(N_EPOCHS):\n",
    "    loss, (weight_gradients, bias_gradients) = loss_and_grad_fun(\n",
    "        weight_matrices,\n",
    "        bias_vectors,\n",
    "    )\n",
    "\n",
    "    weight_matrices = jax.tree_map(\n",
    "        lambda W, W_grad: W - LEARNING_RATE * W_grad,\n",
    "        weight_matrices,\n",
    "        weight_gradients\n",
    "    )\n",
    "    bias_vectors = jax.tree_map(\n",
    "        lambda b, b_grad: b - LEARNING_RATE * b_grad,\n",
    "        bias_vectors,\n",
    "        bias_gradients,\n",
    "    )\n",
    "\n",
    "    if epoch % 100 == 0:\n",
    "        print(f\"epoch: {epoch}, loss: {loss}\")\n",
    "    \n",
    "    loss_history.append(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAGdCAYAAAD3zLwdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCWklEQVR4nO3dd3xUdb7/8feUTAqkEEISAgldIJREQogRAYUosv5YUVexLCAqWLBmXcW9u3r3Xq/u3eJ6VyJ2UCygruCuYkEQUaQlEIrBYCBKTUIIpJI2c35/JIxEigmQnJnM6/l45JHMme+c+ZwvU96c8z3fYzEMwxAAAABkNbsAAAAAT0EwAgAAaEQwAgAAaEQwAgAAaEQwAgAAaEQwAgAAaEQwAgAAaEQwAgAAaGQ3uwBv43K5tH//fgUHB8tisZhdDgAAaAbDMFReXq6YmBhZrafeL0QwaqH9+/crNjbW7DIAAMAZ2LNnj7p3737K+wlGLRQcHCypoWNDQkJMrgYAADRHWVmZYmNj3d/jp0IwaqFjh89CQkIIRgAAeJmfGwbD4GsAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMAAIBGBCMP8eTS7fr9kq0qPVpndikAAPgsgpGHWLD2B72+drdKqwhGAACYhWDkIQL9bJKko3VOkysBAMB3EYw8RADBCAAA0xGMPESgozEY1RKMAAAwC8HIQwQdC0Z19SZXAgCA7yIYeQj3obRal8mVAADguwhGHoLB1wAAmI9g5CEIRgAAmI9g5CGODb6uZvA1AACmIRh5CE7XBwDAfAQjD3HsrLQq9hgBAGAagpGHODbGqJo9RgAAmIZg5CGY4BEAAPMRjDwEY4wAADAfwchDcLo+AADm8+lgdNVVV6lTp0761a9+ZXYpP14ShENpAACYxqeD0X333afXXnvN7DIkcSgNAABP4NPB6OKLL1ZwcLDZZUhi8DUAAJ6gxcHoySefVHJysoKDgxUZGalJkyYpNzf3nBa1atUqTZw4UTExMbJYLFqyZMlJ22VkZKhnz54KCAhQSkqK1q9ff07raEucrg8AgPlaHIy++OILzZo1S2vXrtWyZctUV1enyy67TJWVlSdtv3r1atXV1Z2wPCcnR4WFhSd9TGVlpRISEpSRkXHKOhYtWqT09HQ99thj2rhxoxISEjR+/HgVFRW52yQmJmrw4MEn/Ozfv7+FW936GHwNAID57C19wMcff9zk9vz58xUZGamsrCyNHj26yX0ul0uzZs1Sv379tHDhQtlsDV/+ubm5Gjt2rNLT0/XQQw+d8BwTJkzQhAkTTlvHU089pRkzZmj69OmSpOeee04ffvihXnnlFc2ePVuSlJ2d3dLNM02goyGjEowAADDPWY8xKi0tlSSFh4efuHKrVUuXLtWmTZs0depUuVwu7dy5U2PHjtWkSZNOGoqao7a2VllZWUpLS2vyXGlpaVqzZs2ZbcjPyMjIUHx8vJKTk1tl/YGOhozKJUEAADDPWQUjl8ul+++/XyNHjtTgwYNP2iYmJkYrVqzQV199pRtvvFFjx45VWlqa5s6de8bPW1xcLKfTqaioqCbLo6KiVFBQ0Oz1pKWl6dprr9XSpUvVvXv304aqWbNmKScnRxs2bDjjuk/n2KG02nqXnC6jVZ4DAACcXosPpR1v1qxZ2rZtm7766qvTtouLi9OCBQs0ZswY9e7dWy+//LIsFsvZPPU58dlnn5ldgtuxYCQ1HE7r6H9W/zQAAOAMnPEeo7vvvlsffPCBPv/8c3Xv3v20bQsLCzVz5kxNnDhRVVVVeuCBB870aSVJERERstlsJwzeLiwsVHR09Fmt2yz+9h//KTgzDQAAc7Q4GBmGobvvvluLFy/WihUr1KtXr9O2Ly4u1rhx4zRw4EC99957Wr58uRYtWqQHH3zwjIt2OBxKSkrS8uXL3ctcLpeWL1+u1NTUM16vmaxWiwL8GgdgM84IAABTtPh4zaxZs/Tmm2/q/fffV3BwsHtMT2hoqAIDA5u0dblcmjBhgnr06KFFixbJbrcrPj5ey5Yt09ixY9WtW7eT7j2qqKhQXl6e+3Z+fr6ys7MVHh6uuLg4SVJ6erqmTZum4cOHa8SIEXr66adVWVnpPkvNGwX62VRd52KPEQAAJmlxMDo2aPriiy9usnzevHm6+eabmyyzWq164oknNGrUKDkcDvfyhIQEffbZZ+rSpctJnyMzM1OXXHKJ+3Z6erokadq0aZo/f74kafLkyTp48KAeffRRFRQUKDExUR9//PEJA7K9SaCfTYdVxyn7AACYxGIYBqdAtUBZWZlCQ0NVWlqqkJCQc7rusX9bqV0HK7Vo5gVK6d35nK4bAABf1tzvb5++VpqncV8WpN5lciUAAPgmgpEHcV8WhMHXAACYgmDkQQIdXEgWAAAzEYw8SAAXkgUAwFQEIw/CoTQAAMxFMPIg7gke2WMEAIApCEYexH1WGsEIAABTEIw8SICDQ2kAAJiJYORBAhl8DQCAqQhGHoRgBACAuQhGHoR5jAAAMBfByIMEcLo+AACmIhh5EA6lAQBgLoKRB/kxGHERWQAAzEAw8iDuMUYcSgMAwBQEIw9ybIxRdT3BCAAAMxCMPAjXSgMAwFwEIw9y7FAag68BADAHwciDcK00AADMRTDyIMeCUZ3TUJ2TM9MAAGhrBCMPEuD48Z+DvUYAALQ9gpEHcdissloa/macEQAAbY9g5EEsFsuP44xqOZQGAEBbIxh5GM5MAwDAPAQjDxPA9dIAADANwcjDBDDJIwAApiEYeRjmMgIAwDwEIw8TyKE0AABMQzDyMAEODqUBAGAWgpGHCfRr+CdhjxEAAG2PYORhGGMEAIB5CEYe5tg8RgQjAADaHsHIwzCPEQAA5iEYeRj3WWlcEgQAgDZHMPIwnK4PAIB5CEYehjFGAACYh2DkYbgkCAAA5iEYeRgOpQEAYB6CkYc5diiNYAQAQNsjGHkYJngEAMA8BCMPwxgjAADMQzDyMEGNh9KqCEYAALQ5gpGH6RhglySVVdeZXAkAAL6HYORhQgL8JEkVNfVyuQyTqwEAwLcQjDxMcOMeI8OQKmrrTa4GAADfQjDyMAF+NjnsDf8s5dUEIwAA2hLByAOFHBtndJRxRgAAtCWCkQc6Ns6IPUYAALQtgpEHCmaPEQAApiAYeaDgY3uMaghGAAC0JYKRBwoJPLbHiENpAAC0JYKRBwr2PzbGiD1GAAC0JYKRBzq2x6iUMUYAALQpgpEH6tzRX5J0qKLW5EoAAPAtBCMP1KUxGB2sqDG5EgAAfAvByANFBDcGo3KCEQAAbYlg5IEiOjokScXsMQIAoE0RjDxQl8Y9RiWVtXK6DJOrAQDAdxCMPFB4kEMWi+QypEOV7DUCAKCtEIw8kN1mVUTjAOyC0mqTqwEAwHcQjDxUj/AgSdIPh6pMrgQAAN9BMPJQPTp3kCT9cKjS5EoAAPAdBCMP1bNzwx6j79ljBABAmyEYeageEQ17jPKKKkyuBAAA30Ew8lCDY0IkSTkHylRb7zK5GgAAfAPByEP1iuig0EA/1da7lFtQbnY5AAD4BIKRh7JYLEqMDZMkrdlVbG4xAAD4CIKRBxs7IFKS9Ok3hSZXAgCAbyAYebDLBkVJkrJ2H1Z+MaftAwDQ2ghGHqxraKDGDoiUYUgvrNppdjkAALR7BCMPd+fFfSRJizbs0eY9R8wtBgCAdo5g5OGSe4ZrUmKMXIZ038JNKq2qM7skAADaLYKRF3h04iB1CwvU94eqdMfrWaquc5pdEgAA7RLByAuEd3DopWnD1cFh05pdh3Tn61mqqSccAQBwrhGMvMTAriF65eZkBfhZ9XnuQd395ibVOZkRGwCAc4lg5EVSenfWS1OT5bBbtSynUPcvzFY94QgAgHOGYORlLuoXoeenJMlhs+rDrQf04Dub5XQZZpcFAEC7QDDyQpf0j1TGTcNkt1q0JHu/Hv7nFrkIRwAAnDWCkZe6ND5K/7jhfNmsFr2btVe/f3+bDINwBADA2SAYebFfDOmqp65LkMUivblut/7nw+1mlwQAgFcjGHm5KxO76c/XDJUkvfRVvl76cpfJFQEA4L0IRu3AtcNj9ciEAZKkxz/crg+27De5IgAAvBPBqJ2YObq3br6wpyQpfdFmrd11yNyCAADwQgSjdsJisegP/y9elw+KVq3TpZmvZSqvqNzssgAA8CoEo3bEZrXo6esTNbxHJ5VV1+u2VzN1pKrW7LIAAPAaBKN2JsDPpuenJKl7p4aLzt795iZmxwYAoJkIRu1Q547+enHqcAU5bPoqr1iPcxo/AADNQjBqpwZ2DdHfJydKkuZ//b3eXLfb3IIAAPACBKN2bPygaD142XmSpEff36b1+SUmVwQAgGcjGLVzsy7pq4kJMap3GZr15kYVlVWbXRIAAB6LYNTOWSwW/e81Q9Q/KlgHy2t01xsbVcdgbAAATopg5AOCHHY9NyVJwf52Zf5wWE8sZTA2AAAnQzDyEb0iOuhv1yVIkuat/l7vZ+8zuSIAADwPwciHXDYoWrMu6SNJmv3Prfq2oMzkigAA8CwEIx+Tfml/jeoXoaN1Tt2xIEtl1XVmlwQAgMcgGPkYm9Wi/7v+fHULa5gZO33RZrlchtllAQDgEQhGPii8g0Nzfz1MDrtVn20v1NwvdppdEgAAHoFg5KOGdg/TH385SJL0t09ztTqv2OSKAAAwH8HIh12fHKtrk7rLZUj3vLVJ+48cNbskAABMRTDyYRaLRf89abAGxYSopLJWd72xUTX1TrPLAgDANAQjHxfgZ9Pcm5IUEmBX9p4jevwDJn8EAPgughEU1zlIT1+fKElasPYHLd6019yCAAAwCcEIkqSxA6J079i+kqRH3tuq7QeY/BEA4HsIRnC7L+08jeoXoeo6l+58PUulR5n8EQDgWwhGcLNZLfrHcZM/PvgOkz8CAHwLwQhNdOrg0LM3DZPDZtWynEI9t4rJHwEAvoNghBMkxIbpj1c2TP7410+Y/BEA4DsIRjip4yd/vPetTTpQyuSPAID2j2CEkzp+8sdDjZM/1ta7zC4LAIBWRTDCKR0/+eOm3Uf0+Ic5ZpcEAECrIhjhtI6f/PG1NT/o3SwmfwQAtF8EI/yssQOidO+4fpKk3723VVk/lJhcEQAArYNghGa5f1w/jR8UpVqnS7cvyNK+IwzGBgC0PwQjNIvVatFT1yVqYNcQFVfU6rZXM1VZU292WQAAnFMEIzRbB3+7Xpo2XBEdHdp+oEy/eZuZsQEA7QvBCC3SLSxQz09JksNm1cffFOjvn+0wuyQAAM4ZghFaLKlHuJ64eogk6ZkVeVqyaZ/JFQEAcG4QjHBGfpXUXbeP6S1J+u27m7lsCACgXfDJYHTVVVepU6dO+tWvfmV2KV7t4fEDdMXQrqpzGrpjQZa2HygzuyQAAM6KTwaj++67T6+99prZZXg9q9Wiv12boBG9wlVeU6/p8zZoP6fxAwC8mE8Go4svvljBwcFml9EuBPjZ9OKU4eoX2VEFZdW6ed56lR6tM7ssAADOiMcFo1WrVmnixImKiYmRxWLRkiVLTmiTkZGhnj17KiAgQCkpKVq/fn3bFwq30CA/zb9lhCKD/bWjsEK3L8hUdZ3T7LIAAGgxjwtGlZWVSkhIUEZGxknvX7RokdLT0/XYY49p48aNSkhI0Pjx41VUVORuk5iYqMGDB5/ws3///rbaDJ/TLSxQ86Ynq6O/XWt3lejuNzepzukyuywAAFrEYhiGx87QZ7FYtHjxYk2aNMm9LCUlRcnJyZozZ44kyeVyKTY2Vvfcc49mz57d7HWvXLlSc+bM0bvvvnvadjU1NaqpqXHfLisrU2xsrEpLSxUSEtKyDfIBX+8s1s3zNqi23qUrE2P01HWJslktZpcFAPBxZWVlCg0N/dnvb4/bY3Q6tbW1ysrKUlpamnuZ1WpVWlqa1qxZ0yrP+eSTTyo0NNT9Exsb2yrP015c2CdCc28aJrvVovez9+v3S7bJg7M3AABNeFUwKi4ultPpVFRUVJPlUVFRKigoaPZ60tLSdO2112rp0qXq3r37aUPVI488otLSUvfPnj17zrh+XzFuYJT+PjlRFov01vrdemLpdsIRAMAr2M0uwAyfffZZs9v6+/vL39+/FatpnyYmxKiqtl4P/3OrXvwyX4EOu9IvPc/ssgAAOC2v2mMUEREhm82mwsLCJssLCwsVHR1tUlU4lcnJcfrD/4uXJP1j+Xd66tNc9hwBADyaVwUjh8OhpKQkLV++3L3M5XJp+fLlSk1NNbEynMqtF/XS734xQJL0jxV5+ivhCADgwTzuUFpFRYXy8vLct/Pz85Wdna3w8HDFxcUpPT1d06ZN0/DhwzVixAg9/fTTqqys1PTp002sGqczc3QfWS0WPf7hdmV8vlNOl/Tw5f1lsXC2GgDAs3hcMMrMzNQll1zivp2eni5JmjZtmubPn6/Jkyfr4MGDevTRR1VQUKDExER9/PHHJwzIhme5bVRv2awW/fHfOXrui51yGYYemTCAcAQA8CgePY+RJ2ruPAg4udfWfK9H3/9GkjQ1tYf+c+IgWZnnCADQytrlPEbwflNTe+p/rhosi0V6bc0Pun9RNjNkAwA8BsEIbe6mlB56enKi7FaL/rV5v2a8lqmjtVxbDQBgPoIRTHFlYje9OG24AvysWpl7UFNeXqfSo3VmlwUA8HEEI5jmkv6Rev3WFAUH2JX5w2FNfn6NisqqzS4LAODDCEYw1fCe4Vo0M1URHf31bUG5rnr2a+0oLDe7LACAjyIYwXTxMSF6784L1Tuig/YdOapr5n6tr/OKzS4LAOCDCEbwCHGdg/TPOy/U8B6dVF5dr2nz1mvxpr1mlwUA8DEEI3iMTh0cev22FF0xpKvqnIYeWLRZzyz/jkuIAADaDMEIHiXAz6Znbjhft4/uLUn627Idmv3Prcx1BABoEwQjeByr1aJHfjFQ/33lIFkt0qLMPbpl/gaVVXM6PwCgdRGM4LGmpPbUC1OGK9DPpi+/K9a1c9do35GjZpcFAGjHCEbwaGnxUXr79lR1CfZXbmG5JmWs1ta9pWaXBQBopwhGzZSRkaH4+HglJyebXYrPGdI9VEtmjdSA6GAdLK/Rdc+v0affFJhdFgCgHbIYnPLTIs29Oi/OvfLqOt31xkZ9+V2xLBbpD1fE65aLepldFgDACzT3+5s9RvAawQF+euXmZN0wIk6GIf3XBzn6z399I6eLbA8AODcIRvAqfjarnrhqsB6ZMECSNP/r7zXztUxV1tSbXBkAoD0gGMHrWCwW3T6mj569aZj87VYt/7ZI1z2/RoVcgBYAcJYIRvBavxjSVW/NvECdOzj0zf4yTcpYrZz9ZWaXBQDwYgQjeLVhcZ20+K6R6tOlgw6UVuva577Wytwis8sCAHgpghG8XlznIL1350il9u6sylqnbn01U2+s+8HssgAAXohghHYhNMhPr94yQtcM6y6ny9B/LN6mJ5Zul4sz1gAALUAwQrvhsFv112uHKv3S8yRJL6zapVlvbtTRWqfJlQEAvAXBCO2KxWLRveP66enJiXLYrPpoW4Guf3GtDpbXmF0aAMALEIzQLk06v5sW3DpCYUF+2rzniK56drV2HqwwuywAgIcjGKHdSundWe/deaF6dg7S3sNHNfn5Ndp+gNP5AQCnRjBCu9a7S0f9884LNSgmRMUVtbr+hbXK3nPE7LIAAB6KYIR2r3NHf7054wINiwtT6dE6/fqldVq365DZZQEAPBDBCD4hNNBPC25NUWrvzqqoqde0eev1xY6DZpcFAPAwBCP4jA7+ds2bnqxL+ndRdZ1LM17N1OffMks2AOBHBCP4lAA/m56fMlwTBker1unS7a9naRV7jgAAjQhG8DkOu1X/uOF8XRYfpdp6l2a8lqmv84rNLgsA4AEIRvBJfjar5tw4TGMHRKqm3qVbX83U+vwSs8sCAJiMYASf5bBb9exNwzT6vC46WufU9HnrlfXDYbPLAgCYiGAEnxbgZ9MLU5J0YZ/OqqxtCEffFjAJJAD4KoIRfF6An00vTRuu4T06qay6XlNfXq89JVVmlwUAMAHBqJkyMjIUHx+v5ORks0tBKwhy2PXytGT1jwpWUXmNpry8jgvPAoAPshiGYZhdhDcpKytTaGioSktLFRISYnY5OMcKy6p1zdyvtffwUQ2KCdFbMy9QSICf2WUBAM5Sc7+/2WMEHCcqJEALbk1RREeHvtlfphmvZqq6zml2WQCANkIwAn6iV0QHzZ8+Qh397VqXX6J739qkeqfL7LIAAG2AYAScxOBuoXpx6nA57FZ9mlOo3y3eKo46A0D7RzACTiG1T2f94/rzZbVIb2fu1Z8/yTW7JABAKyMYAadx+eBoPXHVEEnS3JU79dKXu0yuCADQmghGwM+4fkScHrq8vyTp8Q+3659Ze02uCADQWghGQDPcOaaPbruolyTpoX9u0fLthSZXBABoDQQjoBksFot+94uBuvr8bnK6DN31xkZt+J6LzgJAe0MwAprJarXof381VGMHRKqm3qVb5m/Q9gNcVw0A2hOCEdACfjarMm4cpuSenVReXa9pr3BdNQBoTwhGQAsFOmx6aWqyBkQ3XFftppfWaf+Ro2aXBQA4BwhGwBkIDfLTq7eMUFx4kHaXVOn6F9ZqH+EIALwewQg4Q1EhAXpr5gXHhaM12nuYw2oA4M0IRsBZ6BYWqEW3X6CenYO0p+SoJj+/VvnFlWaXBQA4QwQj4Cx1DQ3Uwpmp6hXRQfuOHNU1c7/Wxt2HzS4LAHAGCEbAORAdGqC3b0/V0O6hKqms1Q0vrNUn3xSYXRYAoIUIRsA50iXYXwtnXuCe5+iO17P01LIdcroMs0sDADQTwQg4h4Icdr0wJUlTLughw5D+sfw73TxvvQ5V1JhdGgCgGQhGwDlmt1n135MG66nrEhTgZ9WX3xVr/NNf6uNtB8wuDQDwMwhGQCu5elh3LZk1Uv0iO6q4okZ3vL5Rd72RxWSQAODBCEZAKxoQHaIP7r1Isy7pI5vVoqVbC3TJX1fqfz/+VmXVdWaXBwD4CYthGIwMbYGysjKFhoaqtLRUISEhZpcDL7JtX6n++4McrcsvkSQFB9h1Y0qcbhnZS1EhASZXBwDtW3O/vwlGLUQwwtkwDEOfbS/S/378rfKKKiRJfjaL0gZG6VdJ3TX6vC7ys7EjFwDONYLROZaRkaGMjAw5nU7t2LGDYISz4nIZWv5tkV5ctUvrvy9xL+/cwaFxAyM1dkCURvWLUAd/u4lVAkD7QTBqJewxwrmWs79M/9y4V+9n71NxRa17ucNmVVKPThrRK1wpvcN1fmwnBTpsJlYKAN6LYNRKCEZoLXVOl9btKtHybwu1fHuRdpc0vSCtn82iQTGhSugeqoTYMA3tHqbeER1ktVpMqhgAvAfBqJUQjNAWDMPQzoOVWrvrkNbnl2hd/iEVlp04SWSwv12Du4VqaGyoEruHKTEuTF1DA02oGAA8G8GolRCMYAbDMLS7pErZe45o855Sbd57RN/sL1V1neuEttEhAUqMDdP5cWFKjA3TkO6hCnIwVgmAbyMYtRKCETxFvdOlHYUV2rL3iDbvLdXmPUf0bUGZfnppNpvVov5RwUqMC9P5sWG6oHdnxYYHmVM0AJiEYNRKCEbwZFW19dq6t1Sb9hxR9u4j2rTn8EkPwcWGB2pknwhd2DdCF/bprIiO/iZUCwBth2DUSghG8DYHSo82hqQjyvrhsDbvOaL6n+xWGtwtRJfFR+uyQVHqHxUsi4UB3QDaF4JRKyEYwdtV1NRrQ36JVucVa/XOQ9p+oKzJ/XHhQbp8cLSuHtZNA6J5jQNoHwhGrYRghPamuKJGK7YX6dOcAq36rli19T8O6B4UE6JrhnXXlYkx6szhNgBejGDUSghGaM8qa+q1asdBLcnepxXfFqnO2fDx4LBZdWVijG4d1Yu9SAC8EsGolRCM4CtKKmv1r+x9enfjXm3b9+PhtpF9O2vWxX11Yd8IE6sDgJYhGLUSghF8jWEY2rj7sF7+Kl8fbytwTweQ2ruzHhx/npJ6hJtbIAA0A8GolRCM4Mv2Hq7SC6t26a31u92H2dIGRurR/zdIcZ2ZGwmA5yIYtRKCEdAQkOasyNM7WXvldBly2K26Y0wf3TmmDxe6BeCRCEathGAE/CivqFyP/esbrc47JKnhVP+//GqoUnp3NrkyAGiqud/f1jasCUA70zcyWK/fmqK5Nw1T19AA7S6p0vUvrtXjH+Sous5pdnkA0GIEIwBnxWKxaMKQrvr0gdGaPDxWhiG99FW+Jj7zlfKKys0uDwBahGAE4JwIDvDT//5qqF65ebi6BPvru6IK/XLOav17836zSwOAZiMYATinxg6I0tJ7Rym1d2dV1Tp1z1ub9Md/f6N6p+vnHwwAJiMYATjnugT7a8GtI3TXxX0kSfNWf68Zr2Wqoqbe5MoA4PQIRgBahd1m1UOXD9Bzvx6mAD+rPs89qOueW6OC0mqzSwOAUyIYAWhVlw/uqoUzUxXR0aGcA2WalLGaQdkAPBbBCECrS4wN0+K7RqpvZEcVlFXruufXatu+UrPLAoAT+Gww2rNnjy6++GLFx8dr6NCheuedd8wuCWjXYsOD9PbtqRrSLVQllbW64YW1yvy+xOyyAKAJn535+sCBAyosLFRiYqIKCgqUlJSkHTt2qEOHDqd9HDNfA2envLpOt87P1PrvSxToZ9MLU5M0ql8Xs8sC0M4x8/XP6Nq1qxITEyVJ0dHRioiIUEkJ/3sFWltwgJ9evWWERp/XRUfrnLr11Ux9seOg2WUBgKQzDEb79u3Tr3/9a3Xu3FmBgYEaMmSIMjMzz1lRq1at0sSJExUTEyOLxaIlS5actF1GRoZ69uypgIAApaSkaP369Wf0fFlZWXI6nYqNjT2LqgE0V6DDphenJunS+CjV1rs047VMrSIcAfAALQ5Ghw8f1siRI+Xn56ePPvpIOTk5+tvf/qZOnTqdtP3q1atVV1d3wvKcnBwVFhae9DGVlZVKSEhQRkbGKetYtGiR0tPT9dhjj2njxo1KSEjQ+PHjVVRU5G6TmJiowYMHn/Czf/+PM/GWlJRo6tSpeuGFF5rbBQDOAX+7TRk3DmsSjr76rtjssgD4uBaPMZo9e7ZWr16tL7/88mfbulwuDRs2TP369dPChQtls9kkSbm5uRozZozS09P10EMPnb5Ai0WLFy/WpEmTmixPSUlRcnKy5syZ436u2NhY3XPPPZo9e3aztqWmpkaXXnqpZsyYoSlTpjTrMYwxAs6t2nqX7nojS59tL5K/3apXbk7WyL4RZpcFoJ1ptTFG//rXvzR8+HBde+21ioyM1Pnnn68XX3zx5Cu3WrV06VJt2rRJU6dOlcvl0s6dOzV27FhNmjTpZ0PRqdTW1iorK0tpaWlNnistLU1r1qxp1joMw9DNN9+ssWPHNisUZWRkKD4+XsnJyWdUM4CTc9ityrhpmMYNiFRNvUu3vrpBX+ex5wiAOVocjHbt2qW5c+eqX79++uSTT3TnnXfq3nvv1auvvnrS9jExMVqxYoW++uor3XjjjRo7dqzS0tI0d+7cMy66uLhYTqdTUVFRTZZHRUWpoKCgWetYvXq1Fi1apCVLligxMVGJiYnaunXrKdvPmjVLOTk52rBhwxnXDeDk/O02PfvrYRo7IFLVdS7d8uoGfb2TcASg7dlb+gCXy6Xhw4friSeekCSdf/752rZtm5577jlNmzbtpI+Ji4vTggULNGbMGPXu3Vsvv/yyLBbL2VV+li666CK5XFzUEvAU/nab5v56mO58faNWfFuk217N1IJbU5TU4+TjFwGgNbR4j1HXrl0VHx/fZNnAgQO1e/fuUz6msLBQM2fO1MSJE1VVVaUHHnig5ZUeJyIiQjab7YTB24WFhYqOjj6rdQMwz7FwNKpfhKpqnbp53np9s58ZsgG0nRYHo5EjRyo3N7fJsh07dqhHjx4nbV9cXKxx48Zp4MCBeu+997R8+XItWrRIDz744JlVLMnhcCgpKUnLly93L3O5XFq+fLlSU1PPeL0AzOdvt+n5KUlK7tlJ5dX1mvryeuUVVZhdFgAf0eJg9MADD2jt2rV64oknlJeXpzfffFMvvPCCZs2adUJbl8ulCRMmqEePHlq0aJHsdrvi4+O1bNkyzZs3T3//+99P+hwVFRXKzs5Wdna2JCk/P1/Z2dlN9kqlp6frxRdf1Kuvvqrt27frzjvvVGVlpaZPn97STQLgYYIcdr18c7KGdAvVocpa/fqlddpTUmV2WQB8wBldEuSDDz7QI488ou+++069evVSenq6ZsyYcdK2y5Yt06hRoxQQENBk+aZNm9SlSxd17979hMesXLlSl1xyyQnLp02bpvnz57tvz5kzR3/5y19UUFCgxMRE/eMf/1BKSkpLN6dFOF0faDuHK2s1+YU12lFYodjwQL1z+4WKDg34+QcCwE809/vbZ6+VdqYIRkDbKiqr1nXPr9H3h6rUp0sHLbo9VREd/c0uC4CX4VppANqFyJAAvX5bimJCA7TzYKWmvrxepVUnzqYPAOcCwQiAx+veKUhvzLhAER39lXOgTNPnr1dlTb3ZZQFohwhGALxCr4gOev22EQoN9NPG3Uc0c0GmquucZpcFoJ0hGAHwGgOiQzR/erI6OGxanXdI97y1SXVOJmoFcO4QjAB4lfPjOumlacnyt1u1LKdQv31ns1wuziEBcG4QjAB4ndQ+nTX318Nkt1q0JHu//vD+NnGCLYBzgWAEwCuNHRClv09OlMUivbFut/708beEIwBnjWAEwGtNTIjRk1cNkSQ9/8UuPbtyp8kVAfB2BCMAXu36EXH6/RUDJUl/+SRX81fnm1wRAG9GMALg9W4b1Vv3jesnSfrPf+fo3ay9JlcEwFsRjAC0C/en9dOtF/WSJD307mZ9tPWAyRUB8EYEIwDtgsVi0e+vGKjJw2PlMqR7F27SFzsOml0WAC9DMALQblgsFj1x9RBdMbSr6pyGbl+QqfX5JWaXBcCLEIwAtCs2q0V/vy5Rl/Tvouo6l26Zv0Fb95aaXRYAL0EwAtDuOOxWzf11klJ6hauipl5TX1mnHYXlZpcFwAsQjAC0SwF+Nr18c7ISuofqcFWdbnhhrbYfKDO7LAAejmAEoN3q6G/Xq7eM0OBuITpUWasbXlzLYTUAp0UwAtCuhQU59MZtF+j8uDAdqarTjS+uVdYPh80uC4CHIhgBaPdCA/204NYUjegVrvKaek19eZ3W7TpkdlkAPBDBCIBP6Ohv16vTR+iivhGqrHVq2rz1WplbZHZZADwMwQiAzwh02PTStOEaOyBS1XUu3fZqphZv4vIhAH5EMALgUwL8bHru10malBijepehBxZt1ourdpldFgAPQTAC4HMcdqueui7RfW21/1m6XU8s3S6XyzC5MgBmIxgB8ElWa8O11R6ZMECS9MKqXXrwnc2qc7pMrgyAmQhGAHyWxWLR7WP66K/XJshmtei9Tfs0fd4GlR6tM7s0ACYhGAHweb9K6q6Xpg5XkMOmr/KKdc3cr7X7UJXZZQEwAcEIACRdMiBSb9+equiQAOUVVWjSs6uV+X2J2WUBaGMEo2bKyMhQfHy8kpOTzS4FQCsZ3C1U7989UkO6haqkslY3vrhOSzbtM7ssAG3IYhgGp2G0QFlZmUJDQ1VaWqqQkBCzywHQCqpq6/XAomx98k2hJOmui/voN5f1l81qMbkyAGequd/f7DECgJ8Ictg196Yk3TGmjyTp2ZU7NX3+Bh2pqjW5MgCtjWAEACdhtVo0e8IA/d/1iQrws2rVjoOaOOcr5ewvM7s0AK2IYAQAp3FlYje9d+dIxYYHak/JUV09d7Xez2bcEdBeEYwA4GfEx4To33dfpNHndVF1nUv3LczWH5ZsU3Wd0+zSAJxjBCMAaIawIIfm3Zysuy/pK0lasPYHXf3s18ovrjS5MgDnEsEIAJrJZrXowfH9NX96ssI7OJRzoEz/7x9fcmgNaEcIRgDQQhf3j9RH941SSq9wVdY6dd/CbM3+5xYdreXQGuDtCEYAcAaiQgL0xm0pundcP1ks0sINezRxzlfatq/U7NIAnAWCEQCcIbvNqvRLz9Mbt6YoMti/4VIiGauV8XmenC7mzgW8EcEIAM7ShX0j9Mn9o/WLIdGqdxn6yye5mvz8Gu0p4UK0gLchGAHAOdCpg0MZNw7T365NUEd/uzJ/OKzLn16ltzP3iCsvAd6DYAQA54jFYtE1Sd310X2jlNyzkyprnXro3S264/UsHSyvMbs8AM1AMAKAcyw2PEgLZ6bqocv7y89m0SffFOqyv3+h97P3sfcI8HAEIwBoBTarRXdd3FdLZo1UfNcQHa6q030LszXjtUwVllWbXR6AUyAYAUArGhQTqvfvHqnfXHqe/GwWfba9SGlPfcHYI8BDEYwAoJX52ay6Z1w/fXDPKCV0D1V5db0eeneLps3boH1HjppdHoDjEIwAoI30jw7WP++8ULMnDJDDbtWqHQd12VNf6KUvd6ne6TK7PAAiGAFAm7LbrLpjTB99dN8oDe/RcOba4x9u1y/nrNam3YfNLg/weQQjADBBny4d9fbtqfrT1UMUGuinnANlunru1/r9kq0qPVpndnmAzyIYAYBJrFaLrh8RpxW/GaNrhnWXYUivr92tcX9byan9gEksBu+8FikrK1NoaKhKS0sVEhJidjkA2pE1Ow/pP5Zs1a6DlZKklF7henRivAbFhJpcGeD9mvv9TTBqIYIRgNZUU+/UC1/s0pzP81RT75LFIl2fHKcHLztPnTv6m10e4LUIRq2EYASgLew7clRPLt2uD7YckCQFB9h137h+mpraUw47oyCAliIYtRKCEYC2tD6/RH/89zf6Zn+ZJKl3lw56ZMJApQ2MlMViMbk6wHsQjFoJwQhAW3O6DL2btUd/+SRXxRW1kqSkHp308OUDNKJXuMnVAd6BYNRKCEYAzFJWXafnVu7UK6vzVV3XMCHkJf276LfjByg+hs8j4HQIRq2EYATAbIVl1frH8u+0cMMeOV0NH+FXJsbogbTz1DOig8nVAZ6JYNRKCEYAPEV+caWeWrZD/968X5Jks1p0ZUKM7rqkr/pGdjS5OsCzEIxaCcEIgKfZtq9Uf/00VytzD0qSLBbpF0O66p6xfTUgms8pQCIYtRqCEQBPtWXvET2zIk/Lcgrdy9IGRmnGqF4a0Sucs9jg0whGrYRgBMDTbT9Qpjkr8rR02wEd+4Qf3C1Et13UW78Y0pV5kOCTCEathGAEwFvkFVXo5a/y9d7GvaqpbziLLSrEX1NTe+qGEXEK7+AwuUKg7RCMWgnBCIC3Kams1ZvrftCra37QwfIaSZLDZtVlg6J044g4XdC7s6xWDrOhfSMYtRKCEQBvVVPv1IdbDmj+199ry95S9/KenYN0/Yg4XX1+N0WGBJhYIdB6CEY/Y8+ePZoyZYqKiopkt9v1hz/8Qddee+3PPo5gBKA92LavVAs37NaSTftVUVMvSbJapAv7ROiXiTG6fHC0QgL8TK4SOHcIRj/jwIEDKiwsVGJiogoKCpSUlKQdO3aoQ4fTT45GMALQnlTV1uuDzQe0KHOPsn447F7usFs1bkCkrkyM0ejzuijIYTexSuDsEYxaKCEhQR988IFiY2NP245gBKC92lNSpfez92lJ9n7lFVW4l/vbrRrVL0KXxUdr3MBIde7ob2KVwJlp7vf3WZ2z+ac//UkWi0X333//2azmBKtWrdLEiRMVExMji8WiJUuWnLRdRkaGevbsqYCAAKWkpGj9+vVn9HxZWVlyOp0/G4oAoD2LDQ/S3WP7adkDo/XhvRdp5ujeig0PVE29S59tL9JD/9yi5P/5TNc+97UyPs/Tlr1H5HLxf2u0L2e8b3TDhg16/vnnNXTo0NO2W716tUaMGCE/v6bHqnNyctS5c2dFRUWd8JjKykolJCTolltu0dVXX33S9S5atEjp6el67rnnlJKSoqefflrjx49Xbm6uIiMjJUmJiYmqr68/4bGffvqpYmJiJEklJSWaOnWqXnzxxWZtNwC0dxaLRYNiQjUoJlSPTBig3MJyffpNoT7NKdC2fWXa8P1hbfj+sP7ySa46Bfnpwr4RGtU3QiP7Rqh7p0AmkoRXO6NDaRUVFRo2bJieffZZPf7440pMTNTTTz99QjuXy6Vhw4apX79+WrhwoWw2myQpNzdXY8aMUXp6uh566KHTF2ixaPHixZo0aVKT5SkpKUpOTtacOXPczxUbG6t77rlHs2fPbtZ21NTU6NJLL9WMGTM0ZcqUZj2GQ2kAfNm+I0e1YnuhVn1XrLU7D6m8pul/PqNDApTUs5OSe3TS8J7hGhAdLLuNCSVhvuZ+f5/RHqNZs2bpiiuuUFpamh5//PFTtrNarVq6dKlGjx6tqVOnasGCBcrPz9fYsWM1adKknw1Fp1JbW6usrCw98sgjTZ4rLS1Na9asadY6DMPQzTffrLFjxzYrFGVkZCgjI0NOp/OMagaA9qBbWKCmpPbUlNSeqnO6tHnPEX35XbG+/O6gtuwtVUFZtT7cckAfbjkgSergsCkxLkyDu4VqcEyoBncLVY/wIOZNgsdqcTBauHChNm7cqA0bNjSrfUxMjFasWKFRo0bpxhtv1Jo1a5SWlqa5c+e2uNhjiouL5XQ6TzgMFxUVpW+//bZZ61i9erUWLVqkoUOHuscwLViwQEOGDDlp+1mzZmnWrFnuxAkAvs7PZtXwnuEa3jNcD1x6no7WOpW954iyfijRhu8Pa+PuwyqvrtfqvENanXfI/biO/nbFx4RoUEyI+kcFq29kR/WN7KiwIGbihvlaFIz27Nmj++67T8uWLVNAQPMnAYuLi9OCBQs0ZswY9e7dWy+//LLpx6AvuugiuVwuU2sAgPYk0GFTap/OSu3TWZLkdBn6rqhcG384om/2l2rb/jJtP1Cmipp6rc8v0fr8kiaPj+jor76RHdQvsiEs9egcpNjwIHULC1SAn82MTYIPalEwysrKUlFRkYYNG+Ze5nQ6tWrVKs2ZM0c1NTXucUTHKyws1MyZMzVx4kRt2LBBDzzwgJ555pkzLjoiIkI2m02FhYVNlhcWFio6OvqM1wsAOHdsVosGRIdoQPSP4znqnC7tPFihbfvKlLO/THkHK5RXWK79pdUqrqhRcUWN1u4qOWFdUSH+iu3UEJRiOwWqe3iQYkIDFRXir8iQAIUE2E3/DzfahxYFo3Hjxmnr1q1Nlk2fPl0DBgzQww8/fNJQVFxcrHHjxmngwIF65513tGPHDl188cXy9/fXX//61zMq2uFwKCkpScuXL3cPyna5XFq+fLnuvvvuM1onAKD1+dmsP4alpB+XV9TUa2dRhfKKKvRd4+89JVXac7hKVbVOFZbVqLCsRpnHTUJ5vAA/q6JCAtw/kcH+Cu/gUHgHhzoFOdQpyK/h7w4OhQX6MSAcp9SiYBQcHKzBgwc3WdahQwd17tz5hOVSQ1iZMGGCevTooUWLFslutys+Pl7Lli3T2LFj1a1bNz3wwAMnPK6iokJ5eXnu2/n5+crOzlZ4eLji4uIkSenp6Zo2bZqGDx+uESNG6Omnn1ZlZaWmT5/ekk0CAHiAjv52JcSGKSE2rMlywzBUUlmrPYePuoPSnpKj2nu4SoVl1Sosq1Hp0TpV17n0w6Eq/XCoqlnPFxrop05Bfu6gFBzgp44BdgX729XR397wd4CfOvrbFRzw47KO/nYF+NkU5LDJj3DVLrXqHO9Wq1VPPPGERo0aJYfjx0F1CQkJ+uyzz9SlS5eTPi4zM1OXXHKJ+3Z6erokadq0aZo/f74kafLkyTp48KAeffRRFRQUKDExUR9//PFJ50UCAHgni8Wizh391bmjvxJ/EpqOqa5zqqisRgVl1Y1hqVoHy2tUUlmrw1W1Kqms1ZGqOpVUNfyWpNKjdSo9WqfvmxmkTsZutSjQ0RCSAv1sCnTYFehnVZDDLofdKofN2vC78cf/2O/jl9usctht7vscx7Xxs1tls1rkZ234bbdZZLdaZLdaf/zb1tjGZnG35Yy/s8MlQVqIeYwAwHvVO10qPVqnw1V17tBUWlWn8pp6VVTXq6KmTuXV9cfdrld5dZ0qqutVXl2vytp6efpk3xaLGgOSZLVYZLNYZLU2BCerxSKrRe6/bY3LLRbJZrE0WW61NrY99njLj20tjes5tj7px9uW434f386in9w+7n6Le10Noe6RXwyQv/3cDrhv1XmMAADwRnab1b0H6kwYhqFap0vVtS5V1dXraK1TVbVOVdc1/D5a59TRWqdq612qcboaftc33Hb/OH/8u6bxp2GZs8n99U5DdS6XnE5DdS5DTpehOmfDcqer4b6T7dowDKnW6ZK8eNq9hy8fYNpzE4wAAGgmi8Uif7tN/nabQuX38w9oZa7GgNQQmhoCU73TpTqXIZfLkMtoWNbwWz+53XS5y2XIedxyl0tynmS5YUguoyEkNvxtNNyWcfLlx902pB/X4frxtsuQ1PjbZRiy28w7HEgwAgDAS1mtFvlbmePpXGJIPQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCOCEQAAQCO72QV4G8MwJEllZWUmVwIAAJrr2Pf2se/xUyEYtVB5ebkkKTY21uRKAABAS5WXlys0NPSU91uMn4tOaMLlcmn//v0KDg6WxWI5Z+stKytTbGys9uzZo5CQkHO23vaIvmo++qpl6K/mo6+aj75qvtbsK8MwVF5erpiYGFmtpx5JxB6jFrJarerevXurrT8kJIQ3TjPRV81HX7UM/dV89FXz0VfN11p9dbo9Rccw+BoAAKARwQgAAKARwchD+Pv767HHHpO/v7/ZpXg8+qr56KuWob+aj75qPvqq+Tyhrxh8DQAA0Ig9RgAAAI0IRgAAAI0IRgAAAI0IRgAAAI0IRh4iIyNDPXv2VEBAgFJSUrR+/XqzS2pV//mf/ymLxdLkZ8CAAe77q6urNWvWLHXu3FkdO3bUNddco8LCwibr2L17t6644goFBQUpMjJSv/3tb1VfX9+kzcqVKzVs2DD5+/urb9++mj9/flts3llZtWqVJk6cqJiYGFksFi1ZsqTJ/YZh6NFHH1XXrl0VGBiotLQ0fffdd03alJSU6KabblJISIjCwsJ06623qqKiokmbLVu2aNSoUQoICFBsbKz+/Oc/n1DLO++8owEDBiggIEBDhgzR0qVLz/n2no2f66ubb775hNfZ5Zdf3qSNr/TVk08+qeTkZAUHBysyMlKTJk1Sbm5ukzZt+b7z5M+85vTVxRdffMJr64477mjSxhf6au7cuRo6dKh7QsbU1FR99NFH7vu98jVlwHQLFy40HA6H8corrxjffPONMWPGDCMsLMwoLCw0u7RW89hjjxmDBg0yDhw44P45ePCg+/477rjDiI2NNZYvX25kZmYaF1xwgXHhhRe676+vrzcGDx5spKWlGZs2bTKWLl1qREREGI888oi7za5du4ygoCAjPT3dyMnJMZ555hnDZrMZH3/8cZtua0stXbrU+I//+A/jvffeMyQZixcvbnL/n/70JyM0NNRYsmSJsXnzZuOXv/yl0atXL+Po0aPuNpdffrmRkJBgrF271vjyyy+Nvn37GjfccIP7/tLSUiMqKsq46aabjG3bthlvvfWWERgYaDz//PPuNqtXrzZsNpvx5z//2cjJyTF+//vfG35+fsbWrVtbvQ+a6+f6atq0acbll1/e5HVWUlLSpI2v9NX48eONefPmGdu2bTOys7ONX/ziF0ZcXJxRUVHhbtNW7ztP/8xrTl+NGTPGmDFjRpPXVmlpqft+X+mrf/3rX8aHH35o7Nixw8jNzTV+97vfGX5+fsa2bdsMw/DO1xTByAOMGDHCmDVrlvu20+k0YmJijCeffNLEqlrXY489ZiQkJJz0viNHjhh+fn7GO++84162fft2Q5KxZs0awzAavhCtVqtRUFDgbjN37lwjJCTEqKmpMQzDMB566CFj0KBBTdY9efJkY/z48ed4a1rPT7/sXS6XER0dbfzlL39xLzty5Ijh7+9vvPXWW4ZhGEZOTo4hydiwYYO7zUcffWRYLBZj3759hmEYxrPPPmt06tTJ3VeGYRgPP/yw0b9/f/ft6667zrjiiiua1JOSkmLcfvvt53Qbz5VTBaMrr7zylI/x1b4yDMMoKioyJBlffPGFYRht+77zts+8n/aVYTQEo/vuu++Uj/HVvjIMw+jUqZPx0ksvee1rikNpJqutrVVWVpbS0tLcy6xWq9LS0rRmzRoTK2t93333nWJiYtS7d2/ddNNN2r17tyQpKytLdXV1TfpkwIABiouLc/fJmjVrNGTIEEVFRbnbjB8/XmVlZfrmm2/cbY5fx7E23tyv+fn5KigoaLJdoaGhSklJadI3YWFhGj58uLtNWlqarFar1q1b524zevRoORwOd5vx48crNzdXhw8fdrdpD/23cuVKRUZGqn///rrzzjt16NAh932+3FelpaWSpPDwcElt977zxs+8n/bVMW+88YYiIiI0ePBgPfLII6qqqnLf54t95XQ6tXDhQlVWVio1NdVrX1NcRNZkxcXFcjqdTV4UkhQVFaVvv/3WpKpaX0pKiubPn6/+/fvrwIED+uMf/6hRo0Zp27ZtKigokMPhUFhYWJPHREVFqaCgQJJUUFBw0j47dt/p2pSVleno0aMKDAxspa1rPce27WTbdfx2R0ZGNrnfbrcrPDy8SZtevXqdsI5j93Xq1OmU/XdsHd7g8ssv19VXX61evXpp586d+t3vfqcJEyZozZo1stlsPttXLpdL999/v0aOHKnBgwdLUpu97w4fPuxVn3kn6ytJuvHGG9WjRw/FxMRoy5Ytevjhh5Wbm6v33ntPkm/11datW5Wamqrq6mp17NhRixcvVnx8vLKzs73yNUUwgikmTJjg/nvo0KFKSUlRjx499Pbbb3tlYIFnuv76691/DxkyREOHDlWfPn20cuVKjRs3zsTKzDVr1ixt27ZNX331ldmleLxT9dXMmTPdfw8ZMkRdu3bVuHHjtHPnTvXp06etyzRV//79lZ2drdLSUr377ruaNm2avvjiC7PLOmMcSjNZRESEbDbbCaP0CwsLFR0dbVJVbS8sLEznnXee8vLyFB0drdraWh05cqRJm+P7JDo6+qR9duy+07UJCQnx2vB1bNtO93qJjo5WUVFRk/vr6+tVUlJyTvrPm1+XvXv3VkREhPLy8iT5Zl/dfffd+uCDD/T555+re/fu7uVt9b7zps+8U/XVyaSkpEhSk9eWr/SVw+FQ3759lZSUpCeffFIJCQn6v//7P699TRGMTOZwOJSUlKTly5e7l7lcLi1fvlypqakmVta2KioqtHPnTnXt2lVJSUny8/Nr0ie5ubnavXu3u09SU1O1devWJl9qy5YtU0hIiOLj491tjl/HsTbe3K+9evVSdHR0k+0qKyvTunXrmvTNkSNHlJWV5W6zYsUKuVwu94d3amqqVq1apbq6OnebZcuWqX///urUqZO7TXvrv7179+rQoUPq2rWrJN/qK8MwdPfdd2vx4sVasWLFCYcH2+p95w2feT/XVyeTnZ0tSU1eW77QVyfjcrlUU1Pjva+pFg/Xxjm3cOFCw9/f35g/f76Rk5NjzJw50wgLC2sySr+9+c1vfmOsXLnSyM/PN1avXm2kpaUZERERRlFRkWEYDad4xsXFGStWrDAyMzON1NRUIzU11f34Y6d4XnbZZUZ2drbx8ccfG126dDnpKZ6//e1vje3btxsZGRlecbp+eXm5sWnTJmPTpk2GJOOpp54yNm3aZPzwww+GYTScrh8WFma8//77xpYtW4wrr7zypKfrn3/++ca6deuMr776yujXr1+TU9CPHDliREVFGVOmTDG2bdtmLFy40AgKCjrhFHS73W789a9/NbZv32489thjHncK+un6qry83HjwwQeNNWvWGPn5+cZnn31mDBs2zOjXr59RXV3tXoev9NWdd95phIaGGitXrmxyinlVVZW7TVu97zz9M+/n+iovL8/4r//6LyMzM9PIz8833n//faN3797G6NGj3evwlb6aPXu28cUXXxj5+fnGli1bjNmzZxsWi8X49NNPDcPwztcUwchDPPPMM0ZcXJzhcDiMESNGGGvXrjW7pFY1efJko2vXrobD4TC6detmTJ482cjLy3Pff/ToUeOuu+4yOnXqZAQFBRlXXXWVceDAgSbr+P77740JEyYYgYGBRkREhPGb3/zGqKura9Lm888/NxITEw2Hw2H07t3bmDdvXlts3ln5/PPPDUkn/EybNs0wjIZT9v/whz8YUVFRhr+/vzFu3DgjNze3yToOHTpk3HDDDUbHjh2NkJAQY/r06UZ5eXmTNps3bzYuuugiw9/f3+jWrZvxpz/96YRa3n77beO8884zHA6HMWjQIOPDDz9ste0+E6frq6qqKuOyyy4zunTpYvj5+Rk9evQwZsyYccIHpa/01cn6SVKT90Rbvu88+TPv5/pq9+7dxujRo43w8HDD39/f6Nu3r/Hb3/62yTxGhuEbfXXLLbcYPXr0MBwOh9GlSxdj3Lhx7lBkGN75mrIYhmG0fD8TAABA+8MYIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEYEIwAAgEb/H27V3sDIt+1DAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_history)\n",
    "plt.yscale(\"log\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f3a04519d80>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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jOEREdU77RMbGnqcFTiLQoCJwcvUqVMBAO+8846u58XGxiIpKcmEERER1W/3ZHbAM1/8qJnzck9mh5CvxTwTMpPtcl7WrVuHVq1aoVmzZujfvz+efvppNG+uHmWXlZWhrKys6nO32x2OYRIRRZyYKCdGXdURr23Yq3rMqKs6hpysy07OZDbr08mryc7OxrvvvovVq1djxowZWL9+PQYOHAiPx6P6nOnTpyMhIaHqo23btmEcMRFRZJl0Uxoevrojak+COB3Aw1eHXufF28m5dl8htR5ERMHQtVV64sSJmDFjRsBjfvzxR6SmplZ9/s4772Ds2LFCCbu1/fLLL7jwwguxatUqXH/99X6P8Tfz0rZtW26VJiIKwIwKux5JRr8Za1QbInqr2m6c0J9LSOTDtK3STz75JO69996Ax3TqZNz2uk6dOqFFixbYvXu3avASGxvLpF4iIp1iopyGb4fW08mZSbcUCl3BS8uWLdGyZUuzxuLjv//9L44dO4bkZK6REhHZHTs5U7iYlvNy4MAB5Ofn48CBA/B4PMjPz0d+fj5KSkqqjklNTcXixYsBACUlJfjDH/6AzZs3Y9++fVi9ejWGDh2Kiy66CFlZWWYNk4iIDMJOzhQupu02+stf/lKj4Fz37t0BAGvXrsW1114LANi1axeKi4sBAC6XC99//z3mz5+PkydPIiUlBTfeeCOmTZvGZSEiogjATs4ULuxtREREhvHuNgL09yCi+k3P/dtWW6WJiCiysZMzhYPtitQREVFkYw8iMhuDFyIiMhx7EJGZuGxEREREEYXBCxEREUUUBi9EREQUURi8EBERUURh8EJEREQRhcELERERRRQGL0RERBRRGLwQERFRRGHwQkRERBGlzlXY9faZdLvdFo+EiIiIRHnv2yL9outc8HLq1CkAQNu2bS0eCREREel16tQpJCQkBDzGIYuEOBFEkiQcOnQITZo0gcOhvwmY2+1G27Zt8euvv2q25K6v+DPSxp+RNv6MxPDnpI0/I22R8DOSZRmnTp1CSkoKnM7AWS11bubF6XTiggsuCPk88fHxtn2B7YI/I238GWnjz0gMf07a+DPSZvefkdaMixcTdomIiCiiMHghIiKiiMLgpZbY2FhMmTIFsbGxVg/Ftvgz0safkTb+jMTw56SNPyNtde1nVOcSdomIiKhu48wLERERRRQGL0RE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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x_samples, y_samples)\n",
    "plt.scatter(x_samples, network_forward(x_samples, weight_matrices, bias_vectors, activation_functions))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "265371ff1b98b9f4eaa16d44fb1eb5bb5e02f4557e1c68186d1d500959ccd159"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
